# -*- coding: utf-8 -*-
L=[[1,2],[3,4]]
import numpy as np
a=np.array(L)

#利用内置函数创建数组（ones、zeros、arange)
z1=np.ones((3,3))
z2=np.zeros((3,4))
z4=np.arange(10)
z5=np.arange(2,10,2)#初始值为2，默认步长为2

#数组的尺寸(大小)
d21=z5.shape

#对数组重排（reshape）
r=np.array(range(9))
rl=r.reshape((3,3))

#数组的运算(np.sqrt/abs/sin/cos/exp)

#数组的切片
d=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])

#访问第一行、第三行

dt1=d[[1,3],:]

#取满足第0列大于5的所有列数据，本质上行控制为逻辑列表
df=d[d[:,0]>5,:]

tf=[True,False,False,True]
#取0/3行的所有列数据，=
dt3=d[tf,:]

#去d中大于4的所有元素
d5=d[d>4]

#利用ix_()函数进行数字切片
#提取d中行数为1、2,列数为1,3的所有元素
d7=d[np.ix_([1,2],[1,3])]


#数组的连接（水平连接---hstack()函数，垂直连接----vstack())
a=np.array([[1,2],[3,4]])
b=np.array([[5,6],[7,8]])
c_s=np.hstack((a,b))#水平连接要求行数相同
c_d=np.vstack((a,b))#垂直连接要求列数相同

#当数组只有一行的要进行连接使用np.column_stack()进行连接。

#数据存储
#np.save('data',c_s)#保存为二进制数据文件

#加载未二进制文件
#c_v=np.load('data.npy')

#数组形态变换
arr=np.arange(12)
arr1=arr.reshape(3,4)#设置维度，改变其形态

#使用revel()将二维函数变成一维的
arr2=arr1.ravel()

#数组排序与搜索
arr6=np.array([5,2,3,3,1,9,5,7,8])
arrl=np.sort(arr6)

#使用argmax()和argmin()函数搜索数组最大与最小值，axis=0，axis=1分别表示各行、列

ad=arr6.reshape(3,3)
max=np.argmax(ad)


#矩阵与线性代数运算

#创建Numpy矩阵
mat1=np.mat("1,2,3;4,5,6;7,8,9")
mat2=np.matrix([[1,2,3],[4,5,6],[7,8,9]])

#分块矩阵函数---bmat()
arrt=np.eye(3)#对角
arry=3*arrt
mat=np.bmat("arrt arry;arrt arry")

#矩阵的属性和基本运算
#自身转置T
#返回自身共轭转置H
#返回自身的逆矩阵I

mat1=np.matrix(np.arange(4).reshape(2,2))
mt=mat1.T
mt1=mat1.H
mt2=mat1.I

#点乘
gh=np.mat("1,2,3;4,5,6;7,8,9")
gh1=gh*3
mat7=np.multiply(gh,gh1)

#线性代数运算
#计算逆矩阵---inv
mah=np.mat('1 1 1;1 2 3;1 3 6')
inverse=np.linalg.inv(mah)
a=np.dot(mah,inverse)

#求解方程---solve
s=np.mat("1,-1,1;2,1,0;2,1,-1")
bn=np.array([4,3,-1])
x=np.linalg.solve(s,bn)

#求解特征值与特征向量----eig
sg=np.matrix([[1,0,2],[0,3,0],[2,0,1]])
a_value,a_vector=np.linalg.eig(sg)

#奇异值分解--svd，U,V是正交矩阵，Sigma是一维矩阵
jk=np.mat("4.0,11.0,14.0;8.0,7.0,-2.0")
U,sigma,V=np.linalg.svd(jk,full_matrices=False)

#计算矩阵行列式的值---det()

ty=np.mat("3,4;5,6")
ty_value=np.linalg.det(ty)





